'''
基于字符串的长度，对字符串进行编码。

AAA -> 3A

A     A    A     B   BBCCCCCCCC -> 3A3B8C
           ^i-1  ^i
  

AAAAAAAAAAAA -> 9A3A
            
'''

def run_length_encoding(s):
  encoded_string_characters = [] # 保存数过的字符和个数的列表
  current_run_length = 1         # 数过的字符个数

  for i in range(1, len(s)):
    curr_char = s[i]
    prev_char = s[i - 1]

    if curr_char != prev_char or current_run_length == 9:
      # 我们应该结算一下之前数过的所有字符了
      encoded_string_characters.append(str(current_run_length))
      encoded_string_characters.append(prev_char)
      current_run_length = 0
    
    # 我们应该继续往后数
    current_run_length += 1
  
  # ["3", "A", "2", "B", "8", "C"] -> "3A2B8C"

  # 当 for 结束的时候，我们知道最后一组相同的字符是没有结算的
  # 所以我们要自己手动结算到 encoded_string_characters
  encoded_string_characters.append(str(current_run_length))
  encoded_string_characters.append(s[len(s) - 1])

  return "".join(encoded_string_characters)

print(run_length_encoding("AAABBBCCCCCCCC"))